package cn.com.bluemoon.common;

import cn.com.bluemoon.daps.model.entity.DapDataModel;

import java.lang.annotation.*;

/**
 * 用户数据权限控制
 *
 * @author Jarod.Kong
 * @date 2020/11/2 15:58
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UserPermission {


    /**
     * 该注解实现的是针对
     * 1.数据库中已存在的数据进行操作（编辑、查看、删除）
     * 2.不对新增的情况进行权限控制
     * 3.业务定义是“只允许模型授权者进行数据操作）
     */
    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface SingleRow {
        /**
         * @return id 为对应{@link SingleRow#keyFormClz()}的主键字段名称
         * 在{@link SingleRow#keyFormClz()}为{@link KeyAnnotationClz#PathVariable}
         * & {@link KeyAnnotationClz#RequestParam} & {@link KeyAnnotationClz#RequestBody}用到
         */
        String key() default "id";

        @Deprecated
        Class<? extends DapDataModel> modelClz() default DapDataModel.class;

//        Class<? extends BaseMapper<?>> mapperClz();

        /**
         * 定义{@link SingleRow#key()}对应的注解
         *
         * @return
         */
        KeyAnnotationClz keyFormClz();

        /**
         * 增加功能描述，用于返回前端错误提示
         *
         * @return
         */
        String errorMsg() default "只允许相关授权者进行操作";

        /**
         * 关闭控制
         *
         * @return 1
         */
        boolean enabled() default true;

        /**
         * need model manager default false;
         * {@link DapDataModel#getModelAdmin}
         */
        boolean needModelAdmin() default false;
    }

    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Deprecated
    public @interface MultiRow {

    }
}
